/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Seguridad.Controlador;

import com.dp1.pucp.Modelo.Clases.*;
import com.dp1.pucp.Seguridad.DAO.PerfilDAO;
import com.dp1.pucp.Seguridad.Vista.*;
import com.dp1.pucp.Util.Validaciones;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author ubuntu64
 */
public class RolxPerfilControlador {

    RolxPerfilGUI rolPerfiGUI;
    PerfilControlador controlador;
    PerfilDAO dao;
    ArrayList<Rol> listaRoles = new ArrayList<>();

    public RolxPerfilControlador(PerfilDAO dao, RolxPerfilGUI rolPerfilGUI, PerfilControlador controlador) {
        this.rolPerfiGUI = rolPerfilGUI;
        this.controlador = controlador;
        this.dao = dao;
        this.rolPerfiGUI.addAgregarListener(new agregarListener());
        this.rolPerfiGUI.addLimpiarListener(new limpiarListener());
        this.rolPerfiGUI.addCancelarListener(new cancelarListener());
        this.rolPerfiGUI.addBuscarListener(new buscarListener());
        this.rolPerfiGUI.addSeleccionarTodoListener(new seleccionarTodoListener());
        this.rolPerfiGUI.addEliminarListener(new eliminarListener());
        this.rolPerfiGUI.addEliminarTodoListener(new eliminarTodoListener());
        this.rolPerfiGUI.llenarComboPestana(dao.listarModulos());

        listaRoles = dao.listarRol("", "");
        rolPerfilGUI.listaGrillaRoles(listaRoles);
    }

    class agregarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean noagregar = false;
            int indice = rolPerfiGUI.getFilaSel();
            if (indice != -1) {
                Rolxperfil rxp = new Rolxperfil();
                rxp.setRol(listaRoles.get(indice));
                rxp.setEstado(1);
                rxp.setFechaRegistro(new Date());

                int rol = listaRoles.get(indice).getIdrol();
                //valida que no ingrese roles repetidos
                for (int i = 0; i < controlador.listaRoles.size(); i++) {
                    int rol2 = controlador.listaRoles.get(i).getRol().getIdrol();
                    if (rol == rol2) {
                        noagregar = true;
                    }
                }
                //fin valida que no se ingrese roles repetidos

                if (!noagregar) {
                    controlador.listaRoles.add(rxp);
                }
                controlador.llamarListarRoles();

            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar algún rol.");
                return;
            }

            rolPerfiGUI.dispose();
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            rolPerfiGUI.limpiarDatos();
        }
    }

    class eliminarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int indice = rolPerfiGUI.getFilaSel();
            if (indice != -1) {

                listaRoles.remove(indice);
                rolPerfiGUI.listaGrillaRoles(listaRoles);
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar algún rol.");
                return;
            }
        }
    }

    class cancelarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            rolPerfiGUI.dispose();
        }
    }

    class buscarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String codigo = rolPerfiGUI.getCodigo();
            //String pestaña = rolPerfiGUI.getPestana();
            int modulo = rolPerfiGUI.getCmbPestana();




            String[] modulos = new String[8];
            modulos[0] = "";
            modulos[1] = "Administracion";
            modulos[2] = "Compras";
            modulos[3] = "Logistica";
            modulos[4] = "Ventas";
            modulos[5] = "Produccion";
            modulos[6] = "Seguridad";
            modulos[7] = "CargaMasiva";


            //listaRoles = dao.listarRol(codigo, pestaña);
            listaRoles = dao.listarRol(codigo, modulos[modulo]);

            rolPerfiGUI.listaGrillaRoles(listaRoles);

        }
    }

    class seleccionarTodoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean noagregar = false;
            if (listaRoles.size() != 0) {
                for (int i = 0; i < listaRoles.size(); i++) {
                    noagregar=false;
                    Rolxperfil rxp = new Rolxperfil();
                    rxp.setRol(listaRoles.get(i));
                    rxp.setEstado(1);
                    rxp.setFechaRegistro(new Date());

                      int rol = listaRoles.get(i).getIdrol();
                //valida que no ingrese roles repetidos
                for (int j = 0; j < controlador.listaRoles.size(); j++) {
                    int rol2 = controlador.listaRoles.get(j).getRol().getIdrol();
                    if (rol == rol2) {
                        noagregar = true;
                    }
                }
                //fin valida que no se ingrese roles repetidos
                    if (!noagregar) {
                    controlador.listaRoles.add(rxp);
                }
                    controlador.llamarListarRoles();
                }
                rolPerfiGUI.dispose();
            } else {
                Validaciones.mostrarMensajeErrorVal("No se ha agregado ningún rol.");
            }

        }
    }

    class eliminarTodoListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int tam = listaRoles.size();

            for (int i = 0; i < tam; i++) {
                listaRoles.remove(0);
            }
            rolPerfiGUI.listaGrillaRoles(listaRoles);
        }
    }
}
